CloudFormation으로 VPC, Subnet, InternetGateway, RouteTable 생성해 보기
안녕하세요 클래스메소드 김재욱(Kim Jaewook) 입니다. 이번에는 CloudFormation으로 Network를 생성해 보는 과정을 정리해 봤습니다.
파라미터 설정
AWSTemplateFormatVersion: "2010-09-09" Description: VPC Network set Metadata: "AWS::CloudFormation::Interface": ParameterGroups: - Label: default: "Network Configuration" Parameters: - VPCCIDR - PublicSubnetACIDR - PublicSubnetCCIDR - PrivateSubnetACIDR - PrivateSubnetCCIDR ParameterLabels: VPCCIDR: default: "VPC CIDR" PublicSubnetACIDR: default: "PublicSubnetA CIDR" PublicSubnetCCIDR: default: "PublicSubnetC CIDR" PrivateSubnetACIDR: default: "PrivateSubnetA CIDR" PrivateSubnetCCIDR: default: "PrivateSubnetC CIDR" #------------------------------------------------------------------- #Input VPC, Subnet Parameters #------------------------------------------------------------------- Parameters: VPCCIDR: Type: String Default: "10.0.0.0/16" PublicSubnetACIDR: Type: String Default: "10.0.0.0/18" PublicSubnetCCIDR: Type: String Default: "10.0.64.0/18" PrivateSubnetACIDR: Type: String Default: "10.0.128.0/18" PrivateSubnetCCIDR: Type: String Default: "10.0.192.0/18"
먼저 Metadata를 통해서 하나의 파라미터 그룹과 레이블을 만들어줍니다. 파라미터 그룹에는 하나의 VPC와 4개의 서브넷이 포함되어 있습니다. 이어서 파라미터 레이블을 통해 AWS CloudFormation에서 파라미터를 입력할 때 나타나는 값들을 설정합니다.
CloudFormation에서 확인해 보면, 파라미터 레이블에서 설정했던 값들이 위 이미지와 같이 나오는것을 확인할 수 있습니다. 이어서「Parameters」를 통해서 변수명과 타입, 디폴트 값을 적어주는데, 여기서 디폴트 값은 위 이미지처럼 디폴트로 입력 되는 값들을 타나냅니다.
VPC, Subnet, InternetGateway 생성
#------------------------------------------------------------------- #Set VPC, InternetGateway, Subnet #------------------------------------------------------------------- Resources: VPC: Type: "AWS::EC2::VPC" Properties: CidrBlock: !Ref VPCCIDR EnableDnsSupport: "true" EnableDnsHostnames: "true" InstanceTenancy: default Tags: - Key: Name Value: !Sub "test-vpc"
이어서「Resources」를 통해서 VPC, Subnet, InternetGateway를 생성합니다.「CidrBlock: !Ref VPCCIDR」를 통해서 파라미터에서 입력한 VPC Cidr를 해당 VPC에 적용합니다. VPC에 대한 자세한 내용은 아래 링크를 참고해 주세요.
InternetGateway: Type: "AWS::EC2::InternetGateway" Properties: Tags: - Key: Name Value: !Sub "test-igw" InternetGatewayAttachment: Type: "AWS::EC2::VPCGatewayAttachment" Properties: InternetGatewayId: !Ref InternetGateway VpcId: !Ref VPC
이어서 InternetGateway도 생성합니다. AWS::EC2::VPCGatewayAttachment를 통해서 InternetGateway를 VPC에 연결합니다.
PublicSubnetA: Type: "AWS::EC2::Subnet" Properties: AvailabilityZone: "ap-northeast-2a" CidrBlock: !Ref PublicSubnetACIDR VpcId: !Ref VPC Tags: - Key: Name Value: !Sub "test-front-subnet-1a" PublicSubnetC: Type: "AWS::EC2::Subnet" Properties: AvailabilityZone: "ap-northeast-2c" CidrBlock: !Ref PublicSubnetCCIDR VpcId: !Ref VPC Tags: - Key: Name Value: !Sub "test-front-subnet-1c" PrivateSubnetA: Type: "AWS::EC2::Subnet" Properties: AvailabilityZone: "ap-northeast-2a" CidrBlock: !Ref PrivateSubnetACIDR VpcId: !Ref VPC Tags: - Key: Name Value: !Sub "test-application-subnet-1a" PrivateSubnetC: Type: "AWS::EC2::Subnet" Properties: AvailabilityZone: "ap-northeast-2c" CidrBlock: !Ref PrivateSubnetCCIDR VpcId: !Ref VPC Tags: - Key: Name Value: !Sub "test-application-subnet-1c"
그리고 각각의 서브넷들을 생성합니다.
#------------------------------------------------------------------- #Route Tables #------------------------------------------------------------------- FRONTRTB : Type: "AWS::EC2::RouteTable" Properties: VpcId: !Ref VPC Tags: - Key: Name Value: !Sub "test-front-rtb" APPRTB1A: Type: "AWS::EC2::RouteTable" Properties: VpcId: !Ref VPC Tags: - Key: Name Value: !Sub "test-application-rtb-1a" APPRTB1C: Type: "AWS::EC2::RouteTable" Properties: VpcId: !Ref VPC Tags: - Key: Name Value: !Sub "test-application-rtb-1c" FRONTRTBroute: Type: "AWS::EC2::Route" Properties: RouteTableId: !Ref FRONTRTB DestinationCidrBlock: "0.0.0.0/0" GatewayId: !Ref InternetGateway
이어서 라우팅 테이블을 만들고, FRONTRTBroute 라우팅 테이블에는 인터넷 게이트웨이를 연결합니다.
라우팅 테이블에 서브넷 연결
#------------------------------------------------------------------- #Route Tables Subnet Association #------------------------------------------------------------------- FRONTRTBAssociation: Type: "AWS::EC2::SubnetRouteTableAssociation" Properties: SubnetId: !Ref PublicSubnetA RouteTableId: !Ref FRONTRTB FRONTRTB2Association: Type: "AWS::EC2::SubnetRouteTableAssociation" Properties: SubnetId: !Ref PublicSubnetC RouteTableId: !Ref FRONTRTB APPRTB1AAssociation: Type: "AWS::EC2::SubnetRouteTableAssociation" Properties: SubnetId: !Ref PrivateSubnetA RouteTableId: !Ref APPRTB1A APPRTB1CAssociation: Type: "AWS::EC2::SubnetRouteTableAssociation" Properties: SubnetId: !Ref PrivateSubnetC RouteTableId: !Ref APPRTB1C
이제 각각의 라우팅 테이블에 서브넷을 연결합니다.
결과 확인
이제 CloudFormation에서 생성을 해보면 문제 없이 Complete되는 것을 확인할 수 있습니다.
VPC에 들어가서 확인해 보면 VPC와 서브넷 등이 정상적으로 생성 된 것을 확인할 수 있습니다.